Komprimačních (a dekomprimačních) programů máme pro Linux víc. Mezi ty nejběžnější a nejpoužívanější patří programy:
targzipbzip2zipVšechny jsou pochopitelně bezeztrátové. Každý, kdo pracuje se soubory pod Linuxem, by měl umět s těmito programy zacházet.
tar Příkaz tar v podstatě ani nekomprimuje, jen soubory "sepíše" do jednoho souboru a přidá nějaké pomocné informace (metadata). A právě tohle spojení do jednoho souboru je jeho největší výhoda a kvůli tomu se vlastně používá. Zažitá přípona tar archivu je .tar.
tar cf soubor.tar <maska>
Parametry:
c (create) .. vytvoření archivu.f (file) .. říká, že tar má zapisovat do souboru. Tar je primárně určen pro archivaci na magnetickou pásku, proto je tento parametr velmi důležitý.<maska> .. jméno souboru nebo jména více souborů oddělená mezerou nebo souborová maska.* znamená "všechny soubory v adresáři") nebo adresář nebo více adresářů oddělených mezerou. tar automaticky balí adresáře rekurzivně, a to včetně skrytých souborů a adresářů.Další parametry:
- .. za vstup/výstup se považuje standardní vstup/výstup.u (update) .. přidá do archivu jen soubory novější než ty v archivu.r (append) .. přidá soubor na konec archivu.v (verbose) .. "ukecanost" (otázky, potvrzování apod.).z (gzip) .. zkomprimuje archiv, tzn., prožene ho ještě gzipem. V tomto případě je zažitá přípona .tar.gz nebo kratší, ale méně častá přípona .tgz.tar cvfz soubor.tar.gz <maska>
tar xvf souboru.tar
Parametry:
xx (--extract) .. vybalení souborů z archivu.f (--file) .. říká, že tar má zapisovat do souboru. Tar je primárně určen pro archivaci na magnetickou pásku, proto je tento parametr velmi důležitý.tt (--list) .. pouze vypíše obsah archivu.
v--verbose) .. "ukecanost" (otázky, potvrzování apod.).gzip Příkaz gzip používá pro kompresi kompresní metodu LZ77. Defaultní přípona gzip archivu je .gz.
gzip soubor ...
Pokud není soubor uveden, gzip předpokládá vstup ze standardního vstupu. gzip umí zabalit jen jeden soubor (když je mu zadáno více souborů, zabalí každý zvlášť do archivu) a navíc tento soubor po sbalení smaže (nahradí ho archivem). Ne že by to nějak zvlášť vadilo, ale nemusel by to dělat, pokud se mu to neřekne. U komprese je možné nastavit úroveň komprese číslem 1 až 9 (defaultně je 6). Čím vyšší kvalita, tím menší rychlost balení, to dá rozum.
Parametry:
r (--recursive) .. rekurzivně balí soubory v adresáři.v (--verbose) .. "ukecanost" (otázky, potvrzování apod.).1 - 9 .. číslo vyjadřující úroveň komprese: 1 = --fast, 9 = --best.Jak zabalit více souborů do jednoho souboru archivu? Například takto:
$
gzip -c soubor1 > archiv.gz
$
gzip -c soubor2 >> archiv.gz
nebo lépe:
$
gzip -c soubor1 soubor2 > archiv.gz
anebo vůbec nejlépe (lepší komprese):
$
cat soubor1 soubor2 | gzip > archiv.gz
Z posledního příkladu je však vidět jeden (vážný a ne jediný) nedostatek, který platí pro všechny uvedené i neuvedené možnosti. Po rozbalení dostaneme jeden soubor archivu, který je spojením všech souborů v archivu, což není žádoucí (většinou) a proto se gzip pro balení více souborů do jednoho souboru archivu nepoužívá!
$
gzip -d jmeno_gzip_archivu ...
Pokud není jmeno_gzip_archivu uvedeno, gzip přesměruje výstup na standardní výstup. Soubor archivu se poté smaže (nahradí vybaleným souborem).
Další parametry:
d (--decompress) .. dekomprimace.c (--stdout) .. výstup přesměruje na standardní výstup, nedělá nic s originálními soubory.l (--list) .. vypíše obsah archivu + info o každém souboru (kompresní poměr apod.).v (--verbose) .. "ukecanost" (otázky, potvrzování apod.).h (--help) .. zobrazí nápovědu.bzip2 bzip2 komprimuje pomocí Burrows-Wheeler block sorting text compression algorithm a Huffmanova kódování. Komprese je zřetelně lepší než ta u metod LZ77/LZ78. Defaultní přípona bzip2 archivu je .bz2. V použití se velice podobá programu gzip.
$
bzip2 jmeno_souboru ...
Pokud není jmeno_souboru uvedeno, bzip2 předpokládá vstup ze standardního vstupu, stejně jako gzip. bzip2, opět stejně jako gzip, umí zabalit jen jeden soubor a po zabalení ho smaže (defaultně) – lze vypnout přepínačem --keep. Též je možné nastavit „kvalitu“ komprese číslem 11 až 99, zde už je však defaultní hodnota 9 (čili maximální komprese).
$
bzip2 -d jmeno_bzip2_archivu ...
Parametry:
d (--decompress) .. dekomprimace.Pokud není jmeno_bzip2_archivu uvedeno, bzip2 přesměruje výstup na standardní výstup. Soubor archivu se též (defaultně) smaže (nahradí vybaleným souborem).
Další parametry:
c (--stdout) .. výstup přesměruje na standardní výstup, nedělá nic s originálními soubory.k (--keep) .. nemaže originální soubory při komprimaci/dekomprimaci.v (--verbose) .. "ukecanost" (otázky, potvrzování apod.).h (--help) .. nápověda.bzip2 se ze stejných důvodů jako gzip nepoužívá ke komprimaci více souborů do jednoho souboru archivu.
tar jako jediný umí balit více souborů do jednoho souboru archivu, ale jeho úroveň komprese není nejlepší. gzip a bzip2 více souborů balit neumí, ale zato jejich komprese je u gzip přijatelná a u bzip2 více než výborná. Což takhle využít jejich výhody a používat je společně? Nejdříve zabalíme soubory tarem do jednoho archivu a potom tento archiv znova zabalíme gzipem nebo pomocí bzip2:
tar cf - soubory | bzip2 > archiv.tar.bz2bzip2 -cd archiv.tar.bz2 | tar xf -...a pro gzip podobně. Pozorný žák si zde určitě vzpomene na parametr taru, a proto jej využije k ještě kratšímu zápisu:
tar cfz archiv.tar.gz souborytar xfz archiv.tar.gzPoznámka: Pro ty, co si přivykli na souborový manažer Midnight Commander ještě dodám, že tento zvládá rozbalování archivů tar, gz, bz2, tar.gz, tar.bz2, zip a ještě nějakých dalších. Na takovém archivu jen stačí zmáčknout Enter, tím se z archivu stane "readonly" adresář a zabalené soubory lze prohlížet a vybalovat (kopírovat z archivu – klávesou F5).
Zkomprimujte soubor https://www.edumach.cz/files/teploty.txt různými příkazy pro komprimaci a porovnejte výsledek. Dále použijte příkaz time a zjistěte, který je nejrychlejší. Na základě výsledků vyberte ten, který je nejrychlejší a ve výsledku je nejmenší. Přehledně vypište do tabulky se slovním komentářem.